/* eslint-disable no-unused-vars */
/* eslint-disable no-undef */
class Watcher {
  constructor (vm, key, cb) {
    this.vm = vm
    // data 中的属性名称
    this.key = key

    // 回调函数负责更新视图
    this.cb = cb

    // 把 watcher 对象记录到 Dep 类的静态属性 target
    Dep.target = this

    // 触发get方法， 在get方法中会调用addSub
    this.oldValue = vm[key]

    // 将 target 属性设置为null， 防止重复添加sub
    Dep.target = null
  }

  // 当数据发生变化的时候， 更新视图
  update () {
    const newValue = this.vm[this.key]
    if (this.oldValue === newValue) return
    this.cb && this.cb(newValue)
  }
}
